package cn.iocoder.yudao.module.reading.dal.mysql.hidden;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.reading.dal.dataobject.hidden.UserHiddenItemsDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 用户隐藏项目 Mapper
 *
 * @author 李晨
 */
@Mapper
public interface UserHiddenItemsMapper extends BaseMapperX<UserHiddenItemsDO> {

    /**
     * 根据用户ID和项目信息查询隐藏记录
     *
     * @param userId   用户ID
     * @param itemType 项目类型
     * @param itemId   项目ID
     * @return 隐藏记录
     */
    default UserHiddenItemsDO selectByUserAndItem(Long userId, String itemType, Long itemId) {
        return selectOne(new LambdaQueryWrapperX<UserHiddenItemsDO>()
                .eq(UserHiddenItemsDO::getUserId, userId)
                .eq(UserHiddenItemsDO::getItemType, itemType)
                .eq(UserHiddenItemsDO::getItemId, itemId));
    }

    /**
     * 根据用户ID查询所有隐藏项目
     *
     * @param userId 用户ID
     * @return 隐藏项目列表
     */
    default List<UserHiddenItemsDO> selectListByUserId(Long userId) {
        return selectList(new LambdaQueryWrapperX<UserHiddenItemsDO>()
                .eq(UserHiddenItemsDO::getUserId, userId)
                .orderByDesc(UserHiddenItemsDO::getHiddenTime));
    }

    /**
     * 根据用户ID和项目类型查询隐藏项目
     *
     * @param userId   用户ID
     * @param itemType 项目类型
     * @return 隐藏项目列表
     */
    default List<UserHiddenItemsDO> selectListByUserIdAndType(Long userId, String itemType) {
        return selectList(new LambdaQueryWrapperX<UserHiddenItemsDO>()
                .eq(UserHiddenItemsDO::getUserId, userId)
                .eq(UserHiddenItemsDO::getItemType, itemType)
                .orderByDesc(UserHiddenItemsDO::getHiddenTime));
    }

    /**
     * 删除用户的隐藏记录
     *
     * @param userId   用户ID
     * @param itemType 项目类型
     * @param itemId   项目ID
     * @return 删除的记录数
     */
    default int deleteByUserAndItem(Long userId, String itemType, Long itemId) {
        return delete(new LambdaQueryWrapperX<UserHiddenItemsDO>()
                .eq(UserHiddenItemsDO::getUserId, userId)
                .eq(UserHiddenItemsDO::getItemType, itemType)
                .eq(UserHiddenItemsDO::getItemId, itemId));
    }

    /**
     * 批量删除用户的隐藏记录
     *
     * @param userId  用户ID
     * @param itemIds 项目ID列表
     * @return 删除的记录数
     */
    default int deleteBatchByUserAndItems(Long userId, String itemType, List<Long> itemIds) {
        return delete(new LambdaQueryWrapperX<UserHiddenItemsDO>()
                .eq(UserHiddenItemsDO::getUserId, userId)
                .eq(UserHiddenItemsDO::getItemType, itemType)
                .in(UserHiddenItemsDO::getItemId, itemIds));
    }

}
